package com.itheima.api.treeset.demo05;

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class TreeSetDemo01 {

    /**
     * 1. 定义一个学生类，并且定义对应的成员变量(name , chineseScore , mathScore , englishScore),并且提供对应的get和set方法;为了方便对总分进行
     *    操作，在学习类中在提供一个getTotalScore的方法去获取总分
     * 2. 定义一个测试类
     * 3. 创建TreeSet集合对象(使用有参构造方法)
     * 4. 键盘录入3个学生信息，将学生信息添加到封装了学生对象中
     * 5. 将学生对象添加到集合中
     * 6. 遍历集合
     */
    public static void main(String[] args) {

        // 创建TreeSet集合对象(使用有参构造方法)
        TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {

                /**
                 * 需求是按照总分的从高到底进行排序，因此总分就是我们的主要条件，但是总分相同，能说明是同一个对象吗？不能
                 * 总分比较完毕以后，我们可能还需要比较姓名 ， 数学成绩 ， 语文成绩 ， 英语成绩
                 */
                int result1 = o2.getTotal() - o1.getTotal() ;
                int result2 = result1 == 0 ? o2.getChineseScore() - o1.getChineseScore() : result1 ;
                int result3 = result2 == 0 ? o2.getMathScore() - o1.getMathScore() : result2 ;
                int result4 = result3 == 0 ? o2.getName().compareTo(o1.getName()) : result3 ;

                // 返回
                return result4;
            }

        }) ;

        // 键盘录入3个学生信息，将学生信息添加到封装了学生对象中
        for( int x = 0 ; x < 3 ; x++) {

            Scanner scanner = new Scanner(System.in) ;

            System.out.println("请您录入第" + (x + 1) + "个学生的姓名：");
            String studetName = scanner.next();

            System.out.println("请您录入第" + (x + 1) + "个学生的语文成绩：");
            String chineseScoreStr = scanner.next();

            System.out.println("请您录入第" + (x + 1) + "个学生的数学成绩：");
            String mathScoreStr = scanner.next();

            System.out.println("请您录入第" + (x + 1) + "个学生的英语成绩: ");
            String englishScoreStr = scanner.next();

            // 把键盘录入的学生信息封装到学生对象
            Student s = new Student() ;
            s.setName(studetName);
            s.setChineseScore(Integer.parseInt(chineseScoreStr));
            s.setMathScore(Integer.parseInt(mathScoreStr));
            s.setEnglishScore(Integer.parseInt(englishScoreStr));

            // 把学生对象添加到集合中
            treeSet.add(s) ;

        }

        // 遍历集合
        for(Student s : treeSet) {
            System.out.println(s.getName() + "-----" + s.getTotal() + "----" + s.getChineseScore() + "----" + s.getMathScore() + "----" + s.getEnglishScore());
        }

    }

}
